home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / diskutil / seekup10.lzh / SEEKUP.1_0 / SEEKUP.C next >
Encoding:
C/C++ Source or Header  |  1992-10-04  |  2.0 KB  |  72 lines

  1. /*
  2. *
  3. * SEEKUP
  4. *
  5. * Kurzbeschreibung:
  6. * SEEKUP schaltet auf STs unter TOS 2.06 die Verdoppelung der
  7. * Seekrate aus (erkennbar am Seek-Geräusch der Laufwerke)
  8. *
  9. * Versionen:
  10. * 1.0  mo  25.04.92  Basisversion
  11. *
  12. * Autoren:
  13. * mo   (\/) Martin Osieka, Erbacherstr. 2, D-6100 Darmstadt
  14. *
  15. */
  16.  
  17. #include <stddef.h>
  18. #include <tos.h>
  19.  
  20.  
  21. #define PRGNAME "(\\/) SEEKUP"
  22.  
  23. #define _sysbase (*((SYSHDR **)0x4F2))
  24.  
  25. /*** 3. Variante des DSB ***/
  26. typedef struct {
  27.   char cmdbit3;   /* $00 oder $08, wird zum Positionierkommando geodert
  28.                      Kann mit Flopsrate() verändert/abgefragt werden    */
  29.   char dummy;     /* nicht benutzt */
  30.   short track;    /* Aktuelle Spur */
  31.   short hdmode;   /* 0 oder 3, wird in Register $FF860E geschrieben
  32.                      Dieses Register existiert auf STs nicht */
  33.   short seekrate; /* hdmode=0: 0: 6ms, 1: 12ms, 2: 2ms, 3: 3ms
  34.                      hdmode=3: 0,1: 12ms, 2,3: 6ms
  35.                      Kann mit Flopsrate() verändert/abgefragt werden */
  36. } dsb3S;
  37.  
  38. /*
  39. Das TOS verwaltet die Informationen zu den Floppylaufwerken in DSBs. Ini-
  40. tialisiert werden die DSBs mit { 0, 0, 0xFF00, 3, _seekrate}, damit ist auf
  41. STs defaultmaessig 6ms eingestellt. Die Trackpositionierroutine schaltet im
  42. Fehlerfall <hdmode> um und macht daraufhin einen weiteren Versuch. Die For-
  43. matierfunktion setzt <hdmode> abhaengig von der Anzahl der Sektoren pro Spur.
  44. Besser waere es wohl, wenn das TOS bei jedem erkannten Diskettenwechsel
  45. <hdmode> zunaechst auf 0 setzen wuerde.
  46. */
  47.  
  48. int main( void)
  49. {
  50.   void *stk;
  51.   SYSHDR *sys;
  52.  
  53.   /*** Adresse des OSHEADER bestimmen ***/
  54.   stk = (void *)Super( NULL);
  55.   sys = _sysbase->os_base;
  56.   Super( stk);
  57.  
  58.   /*** Abbildung der Seekrate ausschalten ***/
  59.   if (sys->os_version == 0x206) {
  60.     dsb3S *pdsb = (dsb3S *)0x160A;
  61.     pdsb->hdmode = 0;
  62.     (pdsb+1)->hdmode = 0;
  63.     Cconws( PRGNAME ": Done.\r\n");
  64.   }
  65.   else {
  66.     Cconws( PRGNAME ": Unsupported TOS.\r\n");
  67.   };
  68.  
  69.   return( 0);
  70. } /* main */
  71.  
  72.